<<<<<<< HEAD ## Ejercicio 1 ======= # 1. Data Science ## Pregunta 1 >>>>>>> main

De las siguientes preguntas, clasifica cada una como descriptiva, exploratoria, inferencia, predictiva o causal, y razona brevemente (una frase) el porqué:

1. Dado un registro de vehículos que circulan por una autopista, disponemos de su marca y modelo, país de matriculación, y tipo de vehículo (por número de ruedas). Con tal de ajustar precios de los peajes, ¿Cuántos vehículos tenemos por tipo? ¿Cuál es el tipo más frecuente? ¿De qué países tenemos más vehículos?

Descriptiva, ya que estamos buscando estadíticas del total de vehículos según sus características para hacer un ajuste del precio de los peajes.

2. Dado un registro de visualizaciones de un servicio de video-on-demand, donde disponemos de los datos del usuario, de la película seleccionada, fecha de visualización y categoría de la película, queremos saber ¿Hay alguna preferencia en cuanto a género literario según los usuarios y su rango de edad?

Exploratoria, ya que se está relacionando el rango de edad del usuario con la preferencia del género cinematográfico.

3. Dado un registro de peticiones a un sitio web, vemos que las peticiones que provienen de una red de telefonía concreta acostumbran a ser incorrectas y provocarnos errores de servicio. ¿Podemos determinar si en el futuro, los próximos mensajes de esa red seguirán dando problemas? ¿Hemos notado el mismo efecto en otras redes de telefonía?

Predictiva, ya que intentamos predecir un comportamiento futuro a partir de un registro de peticiones ya realizadas a un sitio web.

4. Dado los registros de usuarios de un servicio de compras por internet, los usuarios pueden agruparse por preferencias de productos comprados. Queremos saber si ¿Es posible que, dado un usuario al azar y según su historial, pueda ser directamente asignado a un o diversos grupos?

Predictiva, porque a partir de los datos que tenemos del historial del usuario, le estamos asignando a un o diversos grupos.

<<<<<<< HEAD ## Ejercicio 2 El segundo apartado de la práctica consiste en el análisis de un fichero de registro de peticiones HTTP, que debéis descargar el fichero adjunto: epa-http.zip, cargar en R, y realizar un análisis

Se recomienda tener cierto nivel de familiaridad y al alcance los cheatsheet de las distintas librerías mencionadas en las sesiones de teoría para un análisis más fácil:

Pregunta 2:

Considera el siguiente escenario:
Sabemos que un usuario de nuestra red empresarial ha estado usando esta para fines no relacionados con el trabajo, como por ejemplo tener un servicio web no autorizado abierto a la red (otros usuarios tienen servicios web activados y autorizados). No queremos tener que rastrear los puertos de cada PC, y sabemos que la actividad puede haber cesado. Pero podemos acceder a los registros de conexiones TCP de cada máquina de cada trabajador (hacia donde abre conexión un PC concreto). Sabemos que nuestros clientes se conectan desde lugares remotos de forma legítima, como parte de nuestro negocio, y que un trabajador puede haber habilitado temporalmente servicios de prueba. Nuestro objetivo es reducir lo posible la lista de posibles culpables, con tal de explicarles que por favor no expongan nuestros sistemas sin permiso de los operadores o la dirección.

Explica con detalle cómo se podría proceder al análisis y resolución del problema mediante Data Science, indicando de donde se obtendrían los datos, qué tratamiento deberían recibir, qué preguntas hacerse para resolver el problema, qué datos y gráficos se obtendrían, y cómo se comunicarían estos.

Obtendríamos los datos de los registros de conexiones TCP salientes por máquina, por ejemplo de los logs del firewall.

Para tratar este conjunto de conexiones TCP primero tendríamos que parsear los datos y normalizarlos para poder trabajar con ellos de forma rápida y eficiente. Además, tendremos que eliminar registros incompletos, asociar cada IP interna a un usuario o equipo concreto. 

Para resolver el problema podrían hacerse estas preguntas:
  -¿Qué patrón deja un servicio web expuesto?
  -¿Qué PCs tienen un número alto de IPs externas únicas conectadas?
  -¿Qué PCs reciben conexiones desde múltiples países?
  -¿Qué PCs reciben conexiones fuera de horario laboral?

Con este análisis podríamos obtener el siguiente listado de gráficos:
  -Histograma: para poder analizar qué IPs externas únicas hay por PC
  -Serie temporal: para observar número de conexiones por hora
  -Mapa geográfico: para determinar el origen de IPs externas por cada PC
  -Heatmap: para poder ver los PC con mayorn número de uso de sus puertos

Para comunicar todo estos datos y gráficos a los trabajadores lo haríamos de una forma no acusatoria, buscando su colaboración mostrandóle los motivos por los cuales su comportamiento no es el adecuado y podría comportar riesgos para la empresa. 

Por otro lado, para comunicarsélos a los directivos haríamos uso de estos gráficos con mensajes claros demostrar las conclusiones y soluciones a las que se han llegado con el análisis.

main

- readr

- stringr

Alternativamente, recordad que podéis consultar la sección de ayuda de RStudio y buscar en la documentación los parámetros, así como ejemplos de uso (al final de cada página de documentación) para las funciones (escribiendo ? o presionando F1 sobre el nombre de la función.

Para las siguientes preguntas se requiere usar R. Indica en este documento para cada pregunta el resultado obtenido, describiendo a grandes rasgos el procedimiento seguido para la obtención de la respuesta, justificando cada decisión tomada a la hora de manipular los datos (descartar, agrupar, transformar, etc).

Asegúrate de entregar también el código en un fichero aparte, para poder ejecutarse directamente en un terminal limpio de R.

Limpiamos los datos e indicamos el tipo de dato de cada campo:

  • Mediante la librería ‘stringr’ impiamos el símbolo ” que se encuentra al inicio de cada valor del campo Tipo y el símbolo ” que se encuentra al final de cada valor del campo Protocolo.

  • Campo ResponseCode lo cambiamos al tipo de dato factor, ya que son “etiquetas”, no son valores númericos.

  • Campo Bytes lo cambiamos al tipo de dato integer, ya que si que nos interesa tratarlo como valor númerico.

Primeras 6 filas del conjunto de datos:
IP Timestamp Tipo URL Protocolo ResponseCode Bytes
141.243.1.172 [29:23:53:25] GET /Software.html HTTP/1.0 200 1497
query2.lycos.cs.cmu.edu [29:23:53:36] GET /Consumer.html HTTP/1.0 200 1325
tanuki.twics.com [29:23:53:53] GET /News.html HTTP/1.0 200 1014
wpbfl2-45.gate.net [29:23:54:15] GET / HTTP/1.0 200 4889
wpbfl2-45.gate.net [29:23:54:16] GET /icons/circle_logo_small.gif HTTP/1.0 200 2624
wpbfl2-45.gate.net [29:23:54:18] GET /logos/small_gopher.gif HTTP/1.0 200 935

Utilizando libreria DT podemos mostrar todo el conjunto de datos, incluyendo un buscador:

Hay que tener en cuenta el consumo que conlleva y el volumen de datos con el que estemos trabajando

Pregunta 1

Una vez cargado el Dataset a analizar, comprobando que se cargan las IPs, el Timestamp, la Petición (Tipo, URL y Protocolo), Código de respuesta, y Bytes de reply.

1. Cuales son las dimensiones del dataset cargado (número de filas y columnas)

Número filas:

47748

Justificación: utilizamos nrow para obtener el número de filas.

Número columnas:

7

Justificación: Utilizamos ncol para obtener el número de columnas.

2. Valor medio de la columna Bytes

7352.335

Justificación: Utilizamos mean para calcular el valor medio de la columna Bytes, indicamos que se ignores valores NA.

Pregunta 2

De las diferentes IPs de origen accediendo al servidor, ¿cuantas pertenecen a una IP claramente educativa (que contenga “.edu”)?

6539

Justificación: Utilizamos grepl para filtrar peticiones que contengan “.edu” en el campo IP, obtenemos el total de peticiones que cumplen este filtro.

Pregunta 3

De todas las peticiones recibidas por el servidor cual es la hora en la que hay mayor volumen de peticiones HTTP de tipo “GET”?

Justificación: Generamos un nuevo dataframe donde únicamente estén las filas con GET, añadimos una nueva columna Hora con las diferentes horas del día que se encuentran en la columna Timestamp y agrupamos por horas. Creamos un dataframe con únicamente 2 columnas: Hora (0-23) y número de peticiones por hora; si ordenamos en orden descendente y solo mostramos la primera fila, tenemos la hora en la que mayor volumen hay:

14
Mostramos las 5 horas del día con mayor número de peticiones:
Hora n
14 4546
13 4202
15 4122
16 3950
12 3707

Probamos barplot para generar un gráfico de barras que nos informe del número de peticiones HTTP GET por hora:

Pregunta 4

De las peticiones hechas por instituciones educativas (.edu), ¿Cuantos bytes en total se han transmitido, en peticiones de descarga de ficheros de texto “.txt”?

El número total de Bytes que se han transmitido en las peticiones de descarga de ficheros de texto son:

2705408

Justificación: De las 6539 peticiones que contienen “.edu” en el campo IP, filtramos de igual forma aquellas que tienen una extensión “.txt” en el campo URL. Calculamos el total sumando las peticiones que cumplen con estas condiciones.

Pregunta 5

Si separamos la petición en 3 partes (Tipo, URL, Protocolo), usando str_split y el separador ” ” (espacio), ¿cuantas peticiones buscan directamente la URL = “/”?

El número total de peticiones que buscan directamente la URL = "/" son:

2382

Justificación: Hemos calculado el total de filas donde el campo URL contenga el símbolo /

Pregunta 6

Aprovechando que hemos separado la petición en 3 partes (Tipo, URL, Protocolo) ¿Cuantas peticiones NO tienen como protocolo “HTTP/0.2”?

Peticiones que NO tienen como protocolo HTTP/0.2:

47747

Justificación: Hemos calculado el total de filas que NO tienen como valor HTTP/0.2